草庐IT

C++ 对和指针

全部标签

c++ - 条件运算符无法解析重载的成员函数指针

我在处理指向C++中重载成员函数的指针时遇到了一个小问题。以下代码编译正常:classFoo{public:floatX()const;voidX(constfloatx);floatY()const;voidY(constfloaty);};void(Foo::*func)(constfloat)=&Foo::X;但这不能编译(编译器提示重载不明确):void(Foo::*func)(constfloat)=(someCondition?&Foo::X:&Foo::Y);这大概是编译器把条件运算符的返回值和函数指针类型分开整理的原因吧?我可以解决它,但我很想知道规范如何说明所有这些应

c++ - C++ 中的指针是原始类型吗?

我想知道std::string的最后一个构造函数提到here.它说:templatestring(InputIteratorbegin,InputIteratorend);如果InputIterator是整型,则通过类型转换begin和end来调用它,表现为第六个构造函数版本(紧挨着它的那个版本):string(static_cast(begin),static_cast(end));在任何其他情况下,参数都被视为迭代器,并且内容被初始化为从迭代器开始引用的元素到迭代器结束引用的元素之前的元素的元素值。那么如果InputIterator是一个char*是什么意思呢?编辑:好吧,我的错。

c++ - 删除指针的时间

黑社区,我有一个关于删除指针的小问题。我正在使用维度为1024x1024的指针到指针矩阵。因为我是动态创建它们的,所以我在程序结束时删除了为它们分配的空间。但是在通常的循环中这样做会花费很多时间——我使用处理器的时钟速率测量了大约2秒。当程序只运行15秒时,2秒是巨大的-另外:使用这些分配的指针的函数被调用不止一次......。这是测量的时间关键代码段,包括测量:time=clock();for(i=0;i删除指针总是那么长吗?还是我只是以错误的方式做事?我希望这里有人能帮我解决这个问题。由于我正在优化一个相当复杂的程序以使其运行得更快,所以我不能使用那些2秒的代码。与所有其他部分相比

c++ - 句柄和智能指针一样吗?

我即将完成Koenig&Moo的AcceleratedC++,在第13章和第14章中,他们列出了几个Handle类(简单的、共享的、引用计数的)的想法和实现。这些类封装了一个原始指针并将动态对象的分配/释放从客户端代码中抽象出来,以避免原始指针的所有危险,并允许用户取消引用它们以访问指向的对象。基本上是一种与原始内存资源交互的“更安全”方式。这些章节中介绍的类本质上是智能指针的实现吗?智能指针对我来说仍然很陌生,但据我了解,这些Handle类执行相同的功能。两者之间有区别还是只是同一事物的另一个名称?假设它们在功能上是等同的,在实践中是否会从头开始编写这样的类,而不是使用已经制作好的智

c++使用结构中的指针保存和加载游戏

我知道我可以使用:MyGamegame;//thegameobject//ofstreamout("mygame.bin",ios::binary);out.write((char*)&game,sizeof(MyGame));保存和加载游戏,但是如果我在MyGame结构中有指针怎么办?指针会被保存而不是它指向的数据吗?以及:如何解决这个问题? 最佳答案 您不能只将指针写入流并期望它神奇地完成。您需要在对象中实现保存/加载方法。例如:classSerializable{virtualvoidsave(std::ofstream&_o

c++ - 指向成员的指针的偏移量

templateptrdiff_tfoo(TU::*m){//returnoffset}在此上下文中如何获取字段“m”的偏移量?我更愿意使用am编译时表达式。在此先感谢您的帮助。最好的问候 最佳答案 @迈克尔J感谢您的回答。这不是我一直在寻找的东西,但它给了我这样做的灵感:templatestd::ptrdiff_tmember_offset(UT::*member){returnreinterpret_cast(&(reinterpret_cast(NULL)->*member));}

c++ - 我应该手动删除智能指针吗?

这可能是个愚蠢的问题,但我不确定答案。下面的代码读取一个文件,对于文件的每一行,通过“new”创建一个智能指针。如果以后要用到智能指针,就存储在一个列表中,否则不存储。我的问题是:如果不存储智能指针,会不会造成潜在的内存泄漏?谢谢。intmain(){.....;std::listaList;while(inFile>>ss){std::tr1::shared_ptraPtr(newSomeClass());//dosomethinginfoo(aPtr)toaPtr,//ifaPtrwillbeusedlater,thenit'sstoredinaList//otherwise,it

c++ - 取消引用指针的地址?

我在工作中处理其他人的代码(Qt桌面应用程序)并发现了这个:connect(&*mpMainWin,SIGNAL(whatever()),this,SLOT(whatever())));我在理解&*mpMainWin部分时遇到一些困难。据我所知,它返回取消引用的指针mpMainWin的地址。但是mpMainWin已经保存了那个地址,所以直接将它作为参数提供应该有相同的结果。所以如果我没有遗漏任何东西并且我的逻辑是正确的,那么做这样的事情的原因是什么?如果有的话,我们应该在什么时候使用这种语法? 最佳答案 这可以用作将智能指针(即不是

c++ - 如何初始化字符串指针?

我想将静态值存储在字符串指针中是否可行?如果我喜欢string*array={"value"};发生错误error:cannotconvert'constchar*'to'std::string*'ininitialization 最佳答案 然后你需要写string*array=newstring("value");虽然你最好还是使用stringarray="value";因为这是使用它的预期方式。否则你需要跟踪内存。 关于c++-如何初始化字符串指针?,我们在StackOverflow

c++ - 检查指向 LLVM 中指针类型的指针

如何在LLVM中检查一个操作数是pointertopointer类型?我们可以检查是否是操作数指针,但是如何检查它是否指向指针呢?我正在使用Clang生成中间代码并使用C++作为源文件。 最佳答案 您可以调用Type::getContainedType(int)来访问指针对象类型。所以它应该是这样的:boolisPointerToPointer(constValue*V){constType*T=V->getType();returnT->isPointerTy()&&T->getContainedType(0)->isPointe